#ifndef __MULTI_BUTTON_H__
#define __MULTI_BUTTON_H__

#include "device.h"

#ifdef __cplusplus
extern "C" {
#endif

// MULTI BUTTON事件
enum {
    BUTTON_SINGLE_CLICKED = 0U, // 按键单击
    BUTTON_MULTI_CLICKED,       // 按键多击
    BUTTON_SHORT_CLICKED,       // 按键短按
    BUTTON_LONG_CLICKED,        // 按键长按
};

// BUTTON结构体
DEVICE_FEATURE_DECLARE (
    Multi_Button,

    struct {
        /**
        * @brief BUTTON驱动接口
        * @return BUTTON状态
        */
        uint8_t(*pfnRead)(void);
    },

    struct {
        uint8_t u8Active;           // 有效状态
        uint8_t u8State;            // 当前状态
        uint8_t u8Count;            // 按键点击次数
        uint8_t u8Reserved;         // 保留字段
        uint8_t u8Tick;           // 按键心跳
        uint8_t u8PressedTick;    // 当前按键按下时间
        uint8_t u8ShortTh;        // 短按时间阈值
        uint8_t u8Interval;       // 按键检测间隔 -- 长按时间阈值
    }
);

/**
 * @brief MULTI BUTTON设备注册
 * @param pstSelf BUTTON设备结构体
 * @return Device_t* 注册成功返回设备结构体指针，失败返回NULL
 */
DEV_REG_DEC(multi_button, Multi_Button_t)

/**
 * @brief 按键监控
 * @param pstDevice 设备结构体指针
 * @return @see DEV_RET_t
 */
DEV_RET_t
multi_button_monitor(Device_t* pstDevice);

#ifdef __cplusplus
}
#endif

#endif /* __MULTI_BUTTON_H__ */
